const BASE_URL = 'http://192.168.240.182:8001';

export function request(config = {}) {
	let {
		url,
		data = {},
		method,
		header = {}
	} = config
	header = {
		'Content-Type': 'application/json',
		'Accept': 'application/json',
	};
	// 使用同步方式获取 token
	const token = uni.getStorageSync('token');
	if (token) {
		header['Authorization'] = `${token}`;
	}
	url = BASE_URL + url
	return new Promise((resolve, reject) => {
		uni.request({
			url,
			data: method === 'GET' ? data : JSON.stringify(data),
			method,
			header,
			success: res => {
				// console.log(res)
				if (res.data.code === 0 || res.data.code === 200) {
					resolve(res.data)
				} else if (res.code === 400) {
					reject(res.data)
				} else if (res.data.code === -2) {
					uni.showToast({
						title: res.data.msg,
						icon: "none"
					})
					reject(res.data)
				} else {
					reject(res.data)
				}
			},
			fail: err => {
				reject(err)
			}
		})
	})
}


/**
 * 专门用于上传文件的函数
 * @param {Object} config 配置对象
 * @param {string} config.url 接口地址（相对路径）
 * @param {string} config.filePath 文件的本地路径
 * @param {string} config.name 文件对应的字段名（默认为 'file'）
 * @param {Object} config.formData 额外的表单数据
 * @param {Object} config.header 请求头
 * @returns {Promise} 返回一个 Promise 对象
 */
export function uploadRequest(config = {}) {
	const {
		url,
		filePath,
		name = 'file',
		formData = {},
		header = {}
	} = config;

	// 处理请求头
	const token = uni.getStorageSync('token');
	if (token) {
		header['Authorization'] = `${token}`;
	}

	// 拼接完整的 URL
	const fullUrl = BASE_URL + url;

	return new Promise((resolve, reject) => {
		uni.uploadFile({
			url: fullUrl,
			filePath,
			name,
			formData,
			header,
			success: (uploadRes) => {
				try {
					const data = JSON.parse(uploadRes.data);
					console.log(data);
					if (data && (data.code === 0 || data.code === 200)) {
						resolve(data.data); // 返回上传成功的数据
					} else {
						reject(new Error(data?.msg || '上传失败：返回数据无效'));
					}
				} catch (e) {
					reject(new Error('解析返回数据失败'));
				}
			},
			fail: (err) => {
				reject(err);
			}
		});
	});
}